package com.ruoyi.project.dj.controller;

import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.dj.utils.StudyTimeRecorder;
import org.springframework.web.bind.annotation.*;

/**
 * 学习时长记录控制器
 * 提供前端调用的学习时长记录接口
 * 
 * @author ruoyi
 * @date 2025-09-25
 */
@RestController
@RequestMapping("/dj/study/time")
public class StudyTimeController extends BaseController {

    /**
     * 开始学习记录
     * 
     * @param resourceType 资源类型：video-视频，material-材料，audio-有声读物，book-红色书籍，realtime-实时资料
     * @param resourceId 资源ID
     * @return 结果
     */
    @PostMapping("/start")
    public AjaxResult startStudy(@RequestParam String resourceType, @RequestParam Long resourceId) {
        try {
            StudyTimeRecorder.startStudy(resourceType, resourceId);
            return AjaxResult.success("开始学习记录成功");
        } catch (Exception e) {
            logger.error("开始学习记录失败", e);
            return AjaxResult.error("开始学习记录失败");
        }
    }

    /**
     * 更新学习位置
     * 主要用于视频、音频等媒体资源
     * 
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param position 当前位置（秒）
     * @return 结果
     */
    @PostMapping("/updatePosition")
    public AjaxResult updatePosition(@RequestParam String resourceType, 
                                     @RequestParam Long resourceId, 
                                     @RequestParam Integer position) {
        try {
            StudyTimeRecorder.updatePosition(resourceType, resourceId, position);
            return AjaxResult.success("更新学习位置成功");
        } catch (Exception e) {
            logger.error("更新学习位置失败", e);
            return AjaxResult.error("更新学习位置失败");
        }
    }

    /**
     * 结束学习记录
     * 
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param isComplete 是否完成学习（可选，默认false）
     * @return 结果
     */
    @PostMapping("/end")
    public AjaxResult endStudy(@RequestParam String resourceType, 
                               @RequestParam Long resourceId,
                               @RequestParam(defaultValue = "false") Boolean isComplete) {
        try {
            StudyTimeRecorder.endStudy(resourceType, resourceId, isComplete);
            return AjaxResult.success("结束学习记录成功");
        } catch (Exception e) {
            logger.error("结束学习记录失败", e);
            return AjaxResult.error("结束学习记录失败");
        }
    }

    /**
     * 获取活跃会话数量（调试用）
     * 
     * @return 结果
     */
    @GetMapping("/status")
    public AjaxResult getStatus() {
        try {
            int activeCount = StudyTimeRecorder.getActiveSessionCount();
            return AjaxResult.success("当前活跃学习会话数量：" + activeCount);
        } catch (Exception e) {
            logger.error("获取学习状态失败", e);
            return AjaxResult.error("获取学习状态失败");
        }
    }
} 